package utils;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

/**
 * permet de lire et d'ecrire dans un fichier texte
 */
public class FichierTexte 
{
	private File file;
	private FileReader fr = null;
	private FileWriter fw = null;
	
	/**
	 * Constructeur par recopie avec un file.
	 * @param file le file du fichier.
	 */
	public FichierTexte(File file)
	{
		this.file = file;
		
		if(!this.file.exists())
		{
			try 
			{
				this.file.createNewFile();
			} catch (IOException e) 
			{
				e.printStackTrace();
			}
		}
	}
	
	/**
	 * Constructeur par recopie avec le lien.
	 * @param file le lien du fichier.
	 */
	public FichierTexte(String file)
	{
		this(new File(file));
	}
	
	/**
	 * permet de lire le fichier.
	 * @return la list de lecture.
	 */
	public List<String> lecture()
	{
		if(!this.file.exists())
		{
			return null;
		}
		
		List<String> retour = new ArrayList<String>();
		String tmp;
	      
		try 
		{			
			if(fr == null) fr = new FileReader(this.file);
			
			tmp = new String();
			int i = 0;
			while((i = fr.read()) != -1)
			{
				tmp += (char)i;
				if((char)i == '\n')
				{
					retour.add(tmp);
					tmp = new String();
				}
			}
			
		} catch (FileNotFoundException e) 
		{
			e.printStackTrace();
			return null;
		} catch (IOException e) 
		{
			e.printStackTrace();
			return null;
		}
		return retour;
	}
	
	/**
	 * permet de sauvegarder des lignes dans un fichier
	 * @param lignes liste de ligne a inserer dans le fichier.
	 * @return vrai si ecriture a reussi.
	 */
	public boolean ecriture(List<String> lignes)
	{
		if(lignes == null || lignes.size() == 0 || this.file == null || !this.file.exists())
		{
			return false;
		}
		
		try 
		{
			if(fw == null) fw = new FileWriter(file);
			
			for(int i = 0; i < lignes.size(); ++i)
			{
				ecriture(lignes.get(i));
			}
		
		} catch (FileNotFoundException e) 
		{
			e.printStackTrace();
			return false;
		} catch (IOException e) 
		{
			e.printStackTrace();
			return false;
		}
		return true;
	}
	
	public boolean ecriture(String lignes)
	{
		if(lignes == null || this.file == null || !this.file.exists())
		{
			return false;
		}
		
		try 
		{
			if(fw == null) fw = new FileWriter(file);
			fw.write(lignes + "\n");
		
		} catch (FileNotFoundException e) 
		{
			e.printStackTrace();
			return false;
		} catch (IOException e) 
		{
			e.printStackTrace();
			return false;
		}
		return true;
	}
	
	/**
	 * permet de fermer les flux
	 */
	public void close()
	{
		try 
		{
			if(this.fr != null) fr.close();
			this.fr = null;
		} catch (IOException e) 
		{
			e.printStackTrace();
		}
		
		try 
		{
			if(this.fw != null) fw.close();
			this.fw = null;
		} catch (IOException e) 
		{
			e.printStackTrace();
		}
	}
	
	/**
	 * permet de changer de fichier.
	 * @param file le nouveau fichier.
	 */
	public void setFile(File file)
	{
		this.file = file;
	}
}